跳到主要内容

Rive 事件

⚠️ 已弃用:请使用数据绑定代替事件

概述

Rive 事件允许 Rive 在动画或状态机中的特定时刻触发自定义事件,你可以在代码中监听和响应这些事件。

示例

添加事件监听器

类似于 DOM 元素的 addEventListener() / removeEventListener() API,你将使用从 useRive Hook 返回的 rive 实例上的 on() / off() API 来订阅 Rive 事件。只需提供 RiveEvent 枚举和一个回调函数,运行时将在检测到任何 Rive 事件时调用该回调。

注意: 你必须使用 useRive() Hook 来订阅 Rive 事件。

示例用法

import { useRive, EventType, RiveEventType } from '@rive-app/canvas';
import { useCallback, useEffect } from 'react';

const MyTextComponent = () => {
const {rive, RiveComponent} = useRive({
src: "/static-assets/star-rating.riv",
artboard: "my-artboard-name",
autoplay: true,
// automaticallyHandleEvents: true, // 自动处理 OpenUrl 事件
stateMachines: "State Machine 1",
});

const onRiveEventReceived = (riveEvent) => {
const eventData = riveEvent.data;
const eventProperties = eventData.properties;
if (eventData.type === RiveEventType.General) {
console.log("事件名称", eventData.name);
// 添加的事件相关元数据
console.log("评分", eventProperties.rating);
console.log("消息", eventProperties.message);
} else if (eventData.type === RiveEventType.OpenUrl) {
console.log("事件名称", eventData.name);
// 手动处理 OpenUrl 事件
window.location.href = eventData.url;
}
};

// 等待 rive 对象实例化后再添加 Rive 事件监听器
useEffect(() => {
if (rive) {
rive.on(EventType.RiveEvent, onRiveEventReceived);
}
}, [rive]);

return (
<RiveComponent />
);
};